package com.sky.orangehireserver.modules.enterprise.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.orangehireserver.modules.enterprise.dto.JobCreateDTO;
import com.sky.orangehireserver.modules.enterprise.dto.JobQueryDTO;
import com.sky.orangehireserver.modules.enterprise.dto.JobUpdateDTO;
import com.sky.orangehireserver.modules.enterprise.vo.JobVO;

import java.util.List;

/**
 * 企业岗位管理服务接口
 * 
 * @author sky
 */
public interface EnterpriseJobService {

    /**
     * 创建岗位
     * 
     * @param orgId 企业ID
     * @param ownerId 职位负责人ID
     * @param createDTO 岗位创建请求DTO
     * @return 岗位信息VO
     */
    JobVO createJob(Long orgId, Long ownerId, JobCreateDTO createDTO);

    /**
     * 更新岗位信息
     * 
     * @param orgId 企业ID
     * @param updateDTO 岗位更新请求DTO
     * @return 岗位信息VO
     */
    JobVO updateJob(Long orgId, JobUpdateDTO updateDTO);

    /**
     * 根据ID删除岗位
     * 
     * @param orgId 企业ID
     * @param jobId 岗位ID
     */
    void deleteJob(Long orgId, Long jobId);

    /**
     * 根据ID获取岗位详情
     * 
     * @param orgId 企业ID
     * @param jobId 岗位ID
     * @return 岗位信息VO
     */
    JobVO getJobById(Long orgId, Long jobId);

    /**
     * 分页查询岗位列表
     * 
     * @param orgId 企业ID
     * @param queryDTO 查询条件DTO
     * @return 分页岗位信息
     */
    IPage<JobVO> getJobPage(Long orgId, JobQueryDTO queryDTO);

    /**
     * 获取企业所有岗位列表
     * 
     * @param orgId 企业ID
     * @return 岗位信息列表
     */
    List<JobVO> getAllJobsByOrgId(Long orgId);

    /**
     * 发布岗位（将草稿状态改为开放状态）
     * 
     * @param orgId 企业ID
     * @param jobId 岗位ID
     */
    void publishJob(Long orgId, Long jobId);

    /**
     * 关闭岗位
     * 
     * @param orgId 企业ID
     * @param jobId 岗位ID
     */
    void closeJob(Long orgId, Long jobId);

    /**
     * 重新开放岗位
     * 
     * @param orgId 企业ID
     * @param jobId 岗位ID
     */
    void reopenJob(Long orgId, Long jobId);

    /**
     * 批量删除岗位
     * 
     * @param orgId 企业ID
     * @param jobIds 岗位ID列表
     */
    void batchDeleteJobs(Long orgId, List<Long> jobIds);

    /**
     * 增加岗位浏览次数
     * 
     * @param jobId 岗位ID
     */
    void incrementViewsCount(Long jobId);

    /**
     * 增加岗位投递次数
     * 
     * @param jobId 岗位ID
     */
    void incrementApplicationsCount(Long jobId);

    /**
     * 根据负责人ID获取岗位列表
     * 
     * @param orgId 企业ID
     * @param ownerId 负责人ID
     * @return 岗位信息列表
     */
    List<JobVO> getJobsByOwnerId(Long orgId, Long ownerId);
}
